package leecode.dp问题;

/**
 * @author wangxi created on 2021/6/3 23:31
 * @version v1.0
 *
 * https://leetcode-cn.com/problems/maximum-product-subarray/
 *
 * 给你一个整数数组 nums ，
 * 请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
 */
public class MaxProduct {

    public static void main(String[] args) {
        int[] nums = {2, -5, -2, -4 ,3};

        MaxProduct obj = new MaxProduct();
        int res = obj.maxProduct(nums);
        System.out.println(res);
    }

    public int maxProduct(int[] nums) {
        // 定义两个值记录最大值最小值
        if (nums == null || nums.length <= 0) {
            return 0;
        }
        int max = nums[0];
        int min = nums[0];
        int result = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] < 0) {
                int temp = max;
                max = min;
                min = temp;
            }
            // 如果一直是正数，那么最大值就是一直乘法就行.
            // 如果出现了一个负数，最大值就是当前元素，最小值就是乘负数
            max = Math.max(nums[i], max * nums[i]);
            min = Math.min(nums[i], min * nums[i]);
            result = Math.max(max, result);
        }
        return result;
    }
}
